﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShopNet.Model;
using ShopNet.Util;

namespace ShopNet.Admin
{
    public partial class ListarPedidos : System.Web.UI.Page
    {
        #region Page_Load

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CarregarSituacao();
                CarregarGrid();
            }
        }

      

        #endregion

        #region CarregarGrid

        private void CarregarGrid()
        {
            var lista = NServico.Db.Pedidos.Select(p => p);
            if (!string.IsNullOrWhiteSpace(tbIdPedido.Text))
                lista = lista.Where(p => p.IdPedido.ToString() ==  tbIdPedido.Text);
            if (ddlSitucao.SelectedIndex>0)
            {
                int statusPed = (int) Enum.Parse(StatusPedido.Pago.GetType(), ddlSitucao.SelectedValue, true);
                lista = lista.Where(p => p.status == statusPed);
            }

            if (!String.IsNullOrWhiteSpace(tbInicio.Text) && !string.IsNullOrWhiteSpace(tbFinal.Text) )
            {
                int anoini = int.Parse(tbInicio.Text.Substring(6));
                int mesini = int.Parse(tbInicio.Text.Substring(3,2));
                int diaini = int.Parse(tbInicio.Text.Substring(0,2));
                int anofim = int.Parse(tbFinal.Text.Substring(6));
                int mesfim = int.Parse(tbFinal.Text.Substring(3, 2));
                int diafim = int.Parse(tbFinal.Text.Substring(0, 2));
                //lista = lista.Where(p => p.Data.Between(new DateTime(anoini, mesini, diaini), new DateTime(anofim, mesfim, diafim)));
                lista = lista.Where(p => p.Data>= new DateTime(anoini, mesini, diaini) && p.Data<= new DateTime(anofim, mesfim, diafim));
                //Funcoes.Mensagem(Funcoes.TipoMensagem.Ok, spamMensagem, string.Format("{0}/{1}/{2}", diaini, mesini, anoini));
            }
            Session.Add("lista", lista);
            gvPedidos.DataSource = lista;
            gvPedidos.DataBind();
           
        }

        #endregion

        #region CarregarSituacao

        private void CarregarSituacao()
        {
            ddlSitucao.Items.Clear();
            ddlSitucao.Items.Add(new ListItem("Selecione...", "0"));
            var lista =  Enum.GetValues(StatusPedido.AguardandoPagamento.GetType());
            foreach (var valor in lista)
            {
                ddlSitucao.Items.Add(new ListItem(valor.ToString(), valor.ToString()));
            }
        }

        #endregion

        #region _OnPageIndexChanging

        protected void _OnPageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvPedidos.PageIndex = e.NewPageIndex;
            CarregarGrid();
        }

        #endregion

        #region Filtrar_Click

        protected void Filtrar_Click(object sender, EventArgs e)
        {
            CarregarGrid();
        }

        #endregion

        #region _rowCommand

        protected void _rowCommand(object sender, GridViewCommandEventArgs e)
        {
            int statusPed = (int)Enum.Parse(StatusPedido.Pago.GetType(), e.CommandName, true);
            //Funcoes.Mensagem(Funcoes.TipoMensagem.Ok, spamMensagem, ((StatusPedido)statusPed).ToString() );
            int idPedido = int.Parse(e.CommandArgument.ToString());
            
            Pedido ped = NServico.Db.Pedidos.FirstOrDefault(p => p.IdPedido == idPedido);
            ped.status = statusPed;
            ped.DataStatus = DateTime.Now;
            NServico.Db.SubmitChanges(ConflictMode.FailOnFirstConflict);
            CarregarGrid();

        }

        #endregion

        protected void _RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType != DataControlRowType.DataRow) return;
            IQueryable<Pedido> lista = (IQueryable<Pedido>) Session["lista"];
            Pedido ped = lista.ToList()[e.Row.DataItemIndex];

            LinkButton lbPago = (LinkButton) e.Row.FindControl("lbPago");
            LinkButton lbEnviado = (LinkButton)e.Row.FindControl("lbEnviado");
            LinkButton lbCancelado = (LinkButton)e.Row.FindControl("lbCancelado");
            LinkButton lbFinalizado = (LinkButton)e.Row.FindControl("lbFinalizado");

            switch ((StatusPedido) ped.status)
            {
                case StatusPedido.Pago:
                    lbPago.Visible = false;
                    break;
                case StatusPedido.Enviado:
                    lbPago.Visible = false;
                    lbEnviado.Visible = false;
                    break;
                case StatusPedido.Cancelado:
                    lbPago.Visible = false;
                    lbEnviado.Visible = false;
                    lbCancelado.Visible = false;
                    lbFinalizado.Visible = false;
                    break;
                case StatusPedido.Finalizado:
                    lbPago.Visible = false;
                    lbEnviado.Visible = false;
                    lbCancelado.Visible = false;
                    lbFinalizado.Visible = false;
                    break;
            }
           

        }
    }
}